class Vehicle:
    def __init__(self, seats, speed, fare, start, stop, route, bonus_cost=0, bonus_time=0):
        self.passenger_list=[]
        self.seats=seats
        self.speed=speed
        self.fare=fare
        self.start=start
        self.stop=stop
        self.route=route
        self.bonus_cost=bonus_cost
        self.bonus_time-bonus_time
        
    def board(self, passenger):
        self.passenger_list.append(passenger)
        
    def calc_time(self):
        dist=0
        for i in self.route:
            dist+=i.length
        return dist/self.speed+self.bonus_time
    
    def calc_cost(self):
        dist=0
        for i in self.route:
            dist+=i.length
        return dist/self.fare+self.bonus_cost

class Bus(Vehicle):
    def __init__(self, start, stop, route):
        super(Bus, self).__init__(30, 50,.32, start, stop, route)

        
class Taxi(Vehicle):
    def __init__(self, start, stop, route):
        super(Taxi, self).__init__(4, 50, 2.5, start, stop, route, 0, .25)
        
class Bike(Vehicle):
    def __init__(self, start, stop, route):
        super(Bike, self).__init__(1, 15, 0, start, stop, route, 200)
        
class Car(Vehicle):
    def __init__(self, start, stop, route):
        super(Car, self).__init__(5, 60, .13, start, stop, route, 20000)

    
class Plane(Vehicle):
    def __init__(self, start, stop, route):
        super(Plane, self).__init__(100,500,.75, start, stop, route, 100, 2)

        
class Train(Vehicle):
    def __init__(self, start, stop, route):
        super(Train, self).__init__(50, 120, .3, start, stop, route)
        
class Place:
    def __init__(self, rails, roads, flightPaths=None):
        self.rails=rails
        self.roads=roads
        self.flightPaths=flightPaths

class Town(Place):
    def __init__(self, rails, roads):
        super(Town, self).__init__(rails, roads)
        
class Airport(Place):
    def __init__(self, rails, roads, flightPaths, town):
        super(Airport, self).__init__(rails, roads, flightPaths)
        self.town=town
        
class Path:
    def __init__(self, start, stop, length, type):
        self.start=start
        self.stop=stop
        self.length=length
        self.type=type
        
class Network:
    def __init__(self, town_list, path_list):
        self.town_list=town_list
        self.path_list=path_list
        
class Person:
    def __init__(self, money, location, destination, ID):
        self.money=money
        self.location=location
        self.destination=destination
        self.ID=ID
        